package Recolector;

import java.io.IOException;
import java.net.URL;
import AlmacenTemp.AlmacenTemp;
import AlmacenTemp.PagTemp;

/**
 * Clase que se encarga de ir cogiendo uno a uno enlaces de la Cola de URLs
 * Para, mediante un URLBrowser, bajarse su contenido HTML y guardarlos
 * en un fichero (a través del AlmacenTemp).
 * En la cola habrán sido guardados previamente por el Recolector de enlaces
 * aquellas URLs pertenecientes a distintos temas (showthread-php?t=...)
 * @author Mikel&Igor
 */
public class RecolectorTemas extends Thread {
    // Tiempo en segundos que espera el hijo si la cola está vacía
    int tiempoEspera;
    // Identificador único de cada hijo (para debug)
    int idHijo;

    /**
     * No lo usaremos, tiene valores por defecto a mano:
     * Tiempo espera = 5s
     * idHijo = -1
     * @deprecated
     */
    public RecolectorTemas() {
        tiempoEspera= 5;
        idHijo = -1;
    }

    /**
     * Constructor preferido cuando se está haciendo debug
     * @param tiempoEspera Tiempo en segundos que espera el hijo si la cola está vacía
     * @param idHijo Identificador único de cada hijo (para debug)
     */
    public RecolectorTemas(int tiempoEspera ,int idHijo) {
        this.tiempoEspera = tiempoEspera;
        this.idHijo = idHijo;
    }

    /**
     * Otro constructor para cuando no se está haciendo debug. (idHijo=-1)
     * @param tiempoEspera Tiempo en segundos que espera el hijo si la cola está vacía
     *
     */
    public RecolectorTemas(int tiempoEspera) {
        this.tiempoEspera = tiempoEspera;
        this.idHijo = 0;
    }


    /**
     * Método de la clase Thread que extendemos para poder ejecutar este código
     * concurrentemente en distintos hilos.
     */
    @Override
    public void run() {
        // Mirar en la cola indefinidamente
        while (true) {
            // Si la cola está vacía
            if ( ColaURL.numURLs() == 0) {
                try {
                    System.out.println("RecolectorTemas [" + idHijo +"] esperando " + tiempoEspera);
                    // Esperar durante tiempoEspera segundos
                    Thread.sleep(tiempoEspera * 1000);
                } catch (InterruptedException ex) {
                    // Si nos interrumpen, cosa que no debería ocurrir, simplemente no hacemos nada.
                    //Logger.getLogger(RecolectorTemas.class.getName()).log(Level.SEVERE, null, ex);
                }
            } // Si la cola contiene algún elemento
            else {
                URL url = ColaURL.sacar();
                URLBrowser ub = new URLBrowser(url);
                try {
                    // Construir una página temporal a base de la direción y el html
                    PagTemp pt = new PagTemp(url.toString(), ub.recolectar());
                    AlmacenTemp.guardar(pt);
                } catch (IOException ex) {
                    //Logger.getLogger(RecolectorTemas.class.getName()).log(Level.SEVERE, null, ex);
                    System.err.println("Fin de página inesperado");
                }
            }
        }
    } 
}
